package com.wrial.kind.doublepointer;
/*
 * @Author  Wrial
 * @Date Created in 17:36 2020/8/8
 * @Description
 * 请从字符串中找出一个最长的不包含重复字符的子字符串，计算该最长子字符串的长度。
 * 输入: "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 */

import java.util.HashSet;
import java.util.Set;

public class LengthOfLongestSubstring {


    /**
     * 需要注意的是，如果某个子串不成立，当前index开始重新算，而是从pl开始去除元素，直到set中不包含当前元素
     * 长度可以统计set的数量
     * 滑动窗口
     */
    public int lengthOfLongestSubstring(String s) {
        if (s.length() <= 1) return s.length();
        Set<Character> set = new HashSet<>();
        int ans = 0;

        for (int pl = 0, pr = 0; pr < s.length(); pr++) {
            while (set.contains(s.charAt(pr))){
                set.remove(s.charAt(pl++));
            }
            set.add(s.charAt(pr));
            ans = Math.max(ans, set.size());
        }
        return ans;
    }

}
